package metar;

/**
 * Sichtweite
 * @author Michel Metzger, Java-Kurs 2013
 * @version 1.0.0
 *
 */
public class VisibilityMetar implements MetarParamInterface {

	/**
	 * Sichtweite in m
	 */
	private int	visibility;

	/**
	 * Originalwert aus der Metar-info
	 */
	private String origParam;

	/**
	 * Konstruktor
	 */
	public VisibilityMetar() {
	}

	/**
	 * Liefert die Sichtweite in m
	 * @return
	 */
	public int getVisibility() {
		return visibility;
	}

	/**
	 * Liefert den original Parameter aus dem MetarInfo
	 * @return
	 */
	public String getOrigParam() {
		return origParam;
	}

	/**
	 * Liefert true, wenn der Parameter eine Sichtweitenangabe enthält
	 * @param val
	 * @return
	 */
	public static boolean isValid(String val) {
		if (val == null) {
			return false;
		}

		if (val.matches("\\d{4}")) {
			return true;
		}
		
		return false;
	}

	/**
	 * Holt die Angabe zur Sichtweite aus dem Parameter
	 * @return
	 * @throws MetarParseException
	 */
	@Override
	public VisibilityMetar parseParam(String val) throws MetarParseException {
		if (!isValid(val)) {
			throw new MetarParseException("Exception while parsing visibility!");
		}

		/**
		 * Sample:
		 * 9999 = Sichtweite am Boden in m (hier also 10 km oder mehr) => Nicht zu verwechseln mit Pistensichtweite (RVR)!
		 */

		try {
			origParam = val;

			visibility = Integer.valueOf(val);
			
			if (MetarInfo.isDebugMode()) {
				System.out.println("*** Visibility.visibility=" + visibility + " m");
			}
		} catch (NumberFormatException e) {
			if (MetarInfo.isDebugMode()) {
				e.printStackTrace();
			}
			throw new MetarParseException("Exception while parsing visibility!", e);
		}
		
		return this;
	}

}
